#include "wx/wxprec.h"
#include "wx/generic/textdlgg.h"
#include "wx/statline.h"

const wxChar wxGetTextFromUserPromptStr[] = wxT( "Input Text" );
const wxChar wxGetPasswordFromUserPromptStr[] = wxT( "Enter Password" );

static const int wxID_TEXT = 3000;

BEGIN_EVENT_TABLE( wxTextEntryDialog, wxDialog )
  EVT_BUTTON( wxID_OK, wxTextEntryDialog::OnOK )
END_EVENT_TABLE()

IMPLEMENT_CLASS( wxTextEntryDialog, wxDialog )

wxTextEntryDialog::wxTextEntryDialog( wxWindow *parent, const wxString& message, const wxString& caption,
                                      const wxString& value, long style, const wxPoint& pos )
  : wxDialog( parent, wxID_ANY, caption, pos, wxDefaultSize, wxDEFAULT_DIALOG_STYLE ), m_value( value ) {
  m_dialogStyle = style;
  m_value = value;
  wxBeginBusyCursor();
  wxBoxSizer *topsizer = new wxBoxSizer( wxVERTICAL );
  wxSizerFlags flagsBorder2;
  flagsBorder2.DoubleBorder();
  topsizer->Add( CreateTextSizer( message ), flagsBorder2 );
  m_textctrl = new wxTextCtrl( this, wxID_TEXT, value, wxDefaultPosition, wxSize( 300, wxDefaultCoord ),
                               style & ~wxTextEntryDialogStyle );
  topsizer->Add( m_textctrl, wxSizerFlags( style & wxTE_MULTILINE ? 1 : 0 ). Expand(). TripleBorder( wxLEFT | wxRIGHT ) );
  wxTextValidator validator( wxFILTER_NONE, &m_value );
  m_textctrl->SetValidator( validator );
  wxSizer *buttonSizer = CreateSeparatedButtonSizer( style & ButtonSizerFlags );
  if( buttonSizer ) {
    topsizer->Add( buttonSizer, wxSizerFlags( flagsBorder2 ).Expand() );
  }
  SetAutoLayout( true );
  SetSizer( topsizer );
  topsizer->SetSizeHints( this );
  topsizer->Fit( this );
  if( style & wxCENTRE ) {
    Centre( wxBOTH );
  }
  m_textctrl->SetSelection( -1, -1 );
  m_textctrl->SetFocus();
  wxEndBusyCursor();
}

void wxTextEntryDialog::OnOK( wxCommandEvent& ( event ) ) {
  if( Validate() && TransferDataFromWindow() ) {
    EndModal( wxID_OK );
  }
}

void wxTextEntryDialog::SetValue( const wxString& val ) {
  m_value = val;
  m_textctrl->SetValue( val );
}

void wxTextEntryDialog::SetTextValidator( long style ) {
  wxTextValidator validator( style, &m_value );
  m_textctrl->SetValidator( validator );
}

void wxTextEntryDialog::SetTextValidator( const wxTextValidator& validator ) {
  m_textctrl->SetValidator( validator );
}

IMPLEMENT_CLASS( wxPasswordEntryDialog, wxTextEntryDialog )

wxPasswordEntryDialog::wxPasswordEntryDialog( wxWindow *parent, const wxString& message, const wxString& caption,
    const wxString& value, long style, const wxPoint& pos )
  : wxTextEntryDialog( parent, message, caption, value, style | wxTE_PASSWORD, pos ) {
}
